#include <iostream>
class SelectServer
{
public:
    //完成初始化，打开套接字，端口绑定，打开监听...
    void Start()
    {
        //调用事件处理函数：
        HandlerEvent()
        {
	        //调用accpet获取用户fd...
        }
        while(true)
        {
            //如果直接用accept会直接阻塞，我们使用select检测_listenfd读事件是否就绪
            //1.定义rfds文件描述符集。
            fd_set rfds;
            FD_ZERO(&rfds);
            int maxfd = -1;
            for (int i = 0; i < FDSIZE; i++)
            {
                if (_fd_array[i] != -1)
                    FD_SET(_fd_array[i], &rfds);
                maxfd = max(maxfd, _fd_array[i]);
            }
            
            //2.执行select，把rfds设置到内核。
            int n = select(_listenfd+1, &rfds, nullptr, nullptr, nullptr);
            
            //3.处理select返回值
            switch(n)
            {
            case -1:
                std::cout<<"select fail"<<std::endl;
                break;
            case 0:
                std::cout<<"time out..."<<std::endl;
                break;
            default:
                std::cout<<"事件就绪..."<<std::endl;
                //处理事件
                HandlerEvent();
                //......
                break;
            }

        }
    }
    //......
private:
    int _listenfd;
    int _fd_array;
    //......
};